package com.itheima.service;

import com.github.pagehelper.Page;
import com.itheima.pojo.Blog;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @ClassName BlogService
 * @Description 博客表 服务类
 * @Author pengkaka
 * @Date 2020/8/4 10:51
 * @Version 1.0
 **/
public interface BlogService {

    /**
     * @Author: pengkaka
     * @Description: 新增博客
     * @Date: 10:54 2020/8/4
     * @Param blog:
     * @return: void
     */
    void add(Blog blog);

    List<Blog> list();

    /**
     * @Author: pengzheng
     * @Description: 删除博客
     * @Date: 14:08 2020/8/4
     * @Param blog:
     * @return: void
     */
    void delete(Blog blog);

    /**
     * @Author: pengzheng
     * @Description: 删除选中博客
     * @Date: 14:15 2020/8/4
     * @Param blogList:
     * @return: void
     */
    void deleteBatch(List<Blog> blogList);

    /**
     * @Author: pengzheng
     * @Description: 编辑博客
     * @Date: 14:25 2020/8/4
     * @Param blog:
     * @return: void
     */
    void edit(Blog blog);

    /**
     * @Author: pengzheng
     * @Description: 分页查询博客列表
     * @Date: 14:43 2020/8/4
     * @Param searchMap:
     * @Param page:
     * @Param size:
     * @return: com.github.pagehelper.Page<com.itheima.pojo.Blog>
     */
    Page<Blog> findPage(Map<String, Object> searchMap);

    /**
     * @Author: pengzheng
     * @Description: 根据状态获取博客数量
     * @Date: 18:30 2020/8/4
     * @Param status:
     * @return: java.lang.Integer
     */
    Integer getBlogCount(int status);

    /**
     * @Author: pengzheng
     * @Description: 获取一年内的文章贡献数
     * @Date: 19:39 2020/8/4
     * @return: java.util.Map<java.lang.String, java.lang.Object>
     */
    Map<String, Object> getBlogContributeCount();

    /**
     * @Author: pengzheng
     * @Description: 获取每个分类下文章数目
     * @Date: 9:07 2020/8/5
     * @return: java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     */
    List<Map<String, Object>> getBlogCountByBlogSort();

    /**
     * @Author: pengzheng
     * @Description: 通过标签获取博客数目
     * @Date: 10:24 2020/8/5     
     * @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>> 
     */
    List<Map<String, Object>> getBlogCountByTag();
    
    /**
     * @Author: pengzheng
     * @Description: 获取最新的博客
     * @Date: 10:18 2020/8/10
     * @Param currentPage: 
     * @Param pageSize: 
     * @return: com.github.pagehelper.Page<com.itheima.pojo.Blog> 
     */
    List<Blog> getNewBlog(Integer currentPage, Integer pageSize);

    /**
     * @Author: pengzheng
     * @Description: 获取首页排行博客
     * @Date: 11:32 2020/8/10     
     * @return: com.github.pagehelper.Page<com.itheima.pojo.Blog> 
     */
    List<Blog> getHotBlog(Integer pageSize);

    /**
     * @Author: pengzheng
     * @Description: 通过推荐等级获取博客列表
     * @Date: 14:01 2020/8/10
     * @Param level: 
     * @Param currentPage: 
     * @Param useSort: 
     * @return: com.github.pagehelper.Page<com.itheima.pojo.Blog> 
     */
    Page<Blog> getBlogPageByLevel(Integer level, Integer currentPage, Integer useSort);

    /**
     * @Author: pengzheng
     * @Description: 按时间戳获取博客
     * @Date: 15:33 2020/8/10
     * @Param currentPage: 
     * @Param pageSize: 
     * @return: com.github.pagehelper.Page<com.itheima.pojo.Blog> 
     */
    List<Blog> getBlogByTime(Integer currentPage, Integer pageSize);
    

    /**
     * luoxuan
     * 2020年8月7日11:28:03
     * 根据分类id分页查询
     * @param uid
     * @param currentPage
     * @param pageSize
     * @return
     */
    Page<Blog> getArticleByBlogSortUid(String uid, Integer currentPage, Integer pageSize);

    /**
     * 通过Uid获取博客内容
     * @param uid
     * @return
     */
    String getBlogByUid(String uid);
    /**
     * 通过uid获取博客收藏数
     * @param uid
     * @return
     */
    Integer getBlogPraiseCountByUid(String uid);

    /**
     * 通过Uid获取博客分类UID
     * @param uid
     * @return
     */
    String getBlogSortUid(String uid);

    /**
     * 通过blogSortUid 获取相同的类型博客
     * @param blogSortUid
     * @return
     */
    List<String> getBlogContentList(String blogSortUid);


    //根据标签获取相关的博客
    Page<Blog> getBlogContentListPage(String tagUid, Integer currentPage, Integer pageSize);

    //点赞，更新搜藏数
    void updateCollectCount(String uid);

    //根据作者搜索blog
    Page<Blog> searchBlogByAuthor(String author, Integer currentPage, Integer pageSize);

    //根据博客分类UID获取相关的博客
    Page<Blog> searchBlogBySort(String blogSortUid, Integer currentPage, Integer pageSize);

    //根据关键词搜索Blog
    Page<Blog> sqlSearchBlog(String keyword, Integer currentPage, Integer pageSize);

    /**
     * @Author: pengzheng
     * @Description: 获取博客的归档日期
     * @Date: 17:18 2020/8/10     
     * @return: java.util.Set<java.lang.String> 
     */
    Set<String> getBlogTimeSortList();
    
    /**
     * @Author: pengzheng
     * @Description: 通过月份获取文章列表
     * @Date: 18:00 2020/8/10
     * @Param monthDate: 
     * @return: java.util.List<com.itheima.pojo.Blog> 
     */
    List<Blog> getArticleByMonth(String monthDate);
}
